package cn.est.utils;
import cn.est.config.SmsConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
import org.springframework.stereotype.Component;

//短信服务工具类(阿里云)
@Component  //类似RedisUtil,通过@Component注解注入Spring容器,将来要用时再取
public class SMSUtil {
    @Autowired
    private SmsConfig smsConfig;

   /**
     LTAIh3VhtOA0l9v5
     Z9zV2b2we2x5pBRRoVdCry5TnJPSGZ
     * 使用AK&SK初始化账号Client
     * @return Client
     * @throws Exception
     */
   //优化下面创建客户端createClient方法的入参,以及通过smsConfig.get配置文件里的属性来获取AccessKey信息
   public  com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
       Config config = new Config()
               // 您的AccessKey ID  通过配置类smsConfig.get属性来读取web层配置文件里关于阿里云配置信息
               .setAccessKeyId(smsConfig.getAccessKeyId())
       // 因为smsConfig.getAccessKeyId()和下面getAccessKeySecret()都是实例对象,所以方法不能设置为静态方法(要去掉static)
               .setAccessKeySecret(smsConfig.getAccessKeySecret());
       // 访问的域名,也是通过配置类读取配置文件
       config.endpoint = smsConfig.getDomain();
       return new com.aliyun.dysmsapi20170525.Client(config);
   }
    //同时优化sendSms方法将不要的参数去掉例如签名title和模板ID-templateId,继续通过配置类来读取配置文件
    public SendSmsResponse   sendSms(String phone,String templateParams) throws Exception {
       //因为调用了createClient()实例对象,所以也去掉了sendSms方法的static静态
        com.aliyun.dysmsapi20170525.Client client = createClient();
        //封装请求对象
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers(phone)//要接收短信验证码的手机号
                .setSignName(smsConfig.getSignName())//阿里云——短信签名
                .setTemplateCode(smsConfig.getTemplateCode())//短信模板的ID
                .setTemplateParam(templateParams);//短信模板的变量code的值也就是将来后台随机生成的验证码

        // 复制代码运行请自行打印 API 的返回值
        return  client.sendSms(sendSmsRequest);
    }

 /*  //下面是通过方法入参来实现短信服务的方式
 public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId,String accessKeySecret)throws Exception {
       Config config = new Config()
               // 您的AccessKey ID
               .setAccessKeyId(accessKeyId)
               // 您的AccessKey Secret
               .setAccessKeySecret(accessKeySecret);
       // 访问的域名
       config.endpoint = "dysmsapi.aliyuncs.com";
       return new com.aliyun.dysmsapi20170525.Client(config);
   }
    public static SendSmsResponse sendSms(String phone,String title,String templateId,String templateParams) throws Exception {
       //accessKeyId-accessKeySecret是系统自动生成的 比如先输入LTAIh3VhtOA0l9v5+上双引号就能自动生成accessKeyId,createClient这里选择抛出异常
com.aliyun.dysmsapi20170525.Client client = SMSUtil.createClient("LTAIh3VhtOA0l9v5","Z9zV2b2we2x5pBRRoVdCry5TnJPSGZ");
        //封装请求对象
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers(phone)//要接收短信验证码的手机号
                .setSignName(title)//阿里云——短信签名
                .setTemplateCode(templateId)//短信模板的ID
                .setTemplateParam(templateParams);//短信模板的变量code的值也就是将来后台随机生成的验证码
        // 运行下面client.sendSms(sendSmsRequest);发送短信
   return   client.sendSms(sendSmsRequest);
    }*/
/*
    //main方法快捷键psvm,下面这个方法测试短信验证——阿里
    public static void main(String[] args) {
        SendSmsResponse sendSmsResponse=null;
        try {//sendSms要try-catch,因为会发生异常(网络问题没接收到短信等等),templateParams(短信模板变量对应实际值)里的code的值后期通过随机数来生成
            sendSmsResponse=SMSUtil.sendSms("15994804883","圣乡堂","SMS_169900031","{code:4234}");
        } catch (Exception e) {
            e.printStackTrace();
        }//打印返回消息message如果是OK就说明发送短信验证码成功(SendSmsResponse对象要初始化=null不然不能调用.getBody())
        System.out.println(sendSmsResponse.getBody().message);
    }*/









}
